package com.example.edu.Utils;

import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;
import java.util.Date;

public class JwtUtil {

    private static final String secretKey = "EDUAidemomadebylhylqlszhlyk"; // 替换为你的密钥

    // 生成 JWT 令牌
    public static String generateToken(String username) {
        return Jwts.builder()
                .setSubject(username)
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24)) // 设置过期时间为 1 天
                .signWith(SignatureAlgorithm.HS256, secretKey)
                .compact();
    }

    // 解析 JWT 令牌
    public static Claims extractClaims(String token) {
        return Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(token)
                .getBody();
    }

    // 获取用户名
    public static String extractUsername(String token) {
        return extractClaims(token).getSubject();
    }

    // 抛去开头的获取用户名
    public static String getUsername(String token){
        token = token.substring(7);
        return extractUsername(token);
    }

    // 检查令牌是否已过期
    public static boolean isTokenExpired(String token) {
        return extractClaims(token).getExpiration().before(new Date());
    }

    // 检查令牌是否将要过期
    public static boolean isTokenWillExpired(String token){
        return extractClaims(token).getExpiration().before(new Date(System.currentTimeMillis()+3 * 60 * 60 * 1000));
    }

    // 验证 JWT 令牌
    public static boolean validateToken(String token, String username) {
        return (username.equals(extractUsername(token)) && !isTokenExpired(token));
    }
}

